package com.orzxlee.FunctionInterface07;

import java.util.ArrayList;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * 第四节 函数接口
 *
 * 常用函数式接口
 *
 *     Predicate接口
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //体验
        //fun();

        // 接口中 and 与 or 方法的使用
        //System.out.println(checkString("hello",s -> s.length() > 8 ,s -> s.length()<15));

        //练习
        //要求符合要求的字符串筛选到集合中,要求:姓名长度大于2,年龄大于33
        String [] strArray = {"林青霞,30","柳岩,34","张曼玉,35","貂蝉,31","王祖贤,33"};
        ArrayList<String> list = myFilter(strArray, s -> s.split(",")[0].length() > 2,
                s -> Integer.parseInt(s.split(",")[1]) > 33);
        for (String s : list) {
            System.out.println(s);
        }



    }

    private static ArrayList<String> myFilter(String [] strArray, Predicate<String> pre, Predicate<String> pre2){

        //定义一个集合
        ArrayList<String> array = new ArrayList<>();
        for (String s : strArray) {
            if(pre.and(pre2).test(s)){
                array.add(s);
            }
        }
        return array;
    }

    private static void fun() {
        boolean b = checkString("hello", s -> s.length() > 8);
        System.out.println(b);
        boolean b2 = checkString("hello world", s -> s.length() > 8);
        System.out.println(b2);
    }


    //判断字符串是否满足要求
    private static boolean checkString(String s, Predicate<String> pre){
        //正常判断逻辑
        //return pre.test(s);

        //逻辑非操作
        return pre.negate().test(s);

    }

    //两个判断条件,对两个判断结果,做逻辑与运算的结果作为最终的结果
    private static boolean checkString(String s, Predicate<String> pre, Predicate<String> pre2){
        //与逻辑
        //return pre.and(pre2).test(s);

        //非逻辑
        return pre.or(pre2).test(s);
    }

}


















